#include "../games/globale.h" // Fonction et Headers globaux

#include "../games/cls_configuration.h" // Classe de gestion du fichier de configuration
#include "../menu/cls_toolbar.h" // Classe de gestion de la toolbar

/* ----------------------------------------------------
			Constructeur
  ----------------------------------------------------- */
cls_Toolbar::cls_Toolbar()
{
    debugTrace("Constructeur cls_Toolbar");

    // Initialisation des surfaces
    this->p_sdlS_Toolbar = NULL;
    this->p_sdlS_IcoInventaire = NULL;
    this->p_sdlS_IcoDialogue = NULL;

}

/* ----------------------------------------------------
			Destructeur
  ----------------------------------------------------- */
cls_Toolbar::~cls_Toolbar()
{
    debugTrace("Destructeur cls_Toolbar");
}

/* ----------------------------------------------------
            Initialisation de la toolbar
  ----------------------------------------------------- */
void cls_Toolbar::fct_InitToolbar(cls_Mouse * clsMouse_Encours, cls_PrimitiveTexte * clsPrimTexte_Dialogue, cls_PrimitiveTexte * clsPrimTexte_DescObj)
{
    // Initialisation de la souris
    this->clsMouse_Encours = clsMouse_Encours;

    // Initialisation des textes
    this->clsPrimTexte_Dialogue = clsPrimTexte_Dialogue;
    this->clsPrimTexte_DescObj = clsPrimTexte_DescObj;

    // Définition de la toolbar
    this->sdlR_PositionToolbar.x = 0;
    this->sdlR_PositionToolbar.y = cls_Configuration::getWindowHeight() - CST_TOOLBAR_HEIGHT;
    this->p_sdlS_Toolbar = SDL_CreateRGBSurface(SDL_HWSURFACE, cls_Configuration::getWindowWidth(), CST_TOOLBAR_HEIGHT, 32, 0, 0, 0, 0); // Allocation de la surface

    // Définition de l'icone inventaire
    this->sdlR_PositionIcoInventaire.x = 12;
    this->sdlR_PositionIcoInventaire.y = cls_Configuration::getWindowHeight() - CST_TOOLBAR_HEIGHT;
    //this->sdlR_PositionIcoInventaire.y = this->p_sdlS_Ecran.h - CST_TOOLBAR_HEIGHT;
    this->p_sdlS_IcoInventaire = load_image(join_pathFile(PATH_DATA_IMG_GAME_UI, "inventaire.png"));

    // Définition de l'icone dialogue
    this->sdlR_PositionIcoDialogue.x = 55;
    this->sdlR_PositionIcoDialogue.y = cls_Configuration::getWindowHeight() - CST_TOOLBAR_HEIGHT;
    this->p_sdlS_IcoDialogue = load_image(join_pathFile(PATH_DATA_IMG_GAME_UI, "dialogue.png"));

}

/* ----------------------------------------------------
			Retourne si le point X, Y est dans la boite
  ----------------------------------------------------- */
bool cls_Toolbar::isInBox(SDL_Rect sdlR_PositionToolbar, int mouseX, int mouseY)
{
    if (((sdlR_PositionToolbar.x < mouseX) && (sdlR_PositionToolbar.x + sdlR_PositionToolbar.w > mouseX))
        && ((sdlR_PositionToolbar.y < mouseY) && (sdlR_PositionToolbar.y + sdlR_PositionToolbar.h > mouseY)))
    {
        return true;
    }

    return false;
}

/* ----------------------------------------------------
			Gestion des évènements
  ----------------------------------------------------- */
void cls_Toolbar::fct_HandleInput(SDL_Event event)
{
    switch (event.type)
    {
        case SDL_MOUSEMOTION:
            if (isInBox(this->sdlR_PositionToolbar, event.motion.x, event.motion.y) == true)
            {
                this->clsMouse_Encours->fct_SetMouseCursor(MOUSE_CURSOR_ARROW);
            }
            break;

        default: break;
    }
}

/* ----------------------------------------------------
			On Dessine la toolbar au bon endroit
  ----------------------------------------------------- */
void cls_Toolbar::fct_DrawToolbar(SDL_Surface *p_sdlS_Ecran, int n_CurrentTime)
{

    // Définition du cadre noir permettant d'avoir le visuel de la toolbar
    SDL_FillRect(this->p_sdlS_Toolbar, NULL, SDL_MapRGB(p_sdlS_Ecran->format, 0, 0, 0)); // Remplissage de la surface avec du blanc
    SDL_BlitSurface(this->p_sdlS_Toolbar, NULL, p_sdlS_Ecran, &this->sdlR_PositionToolbar); // Collage de la surface sur l'écran

    SDL_BlitSurface(this->p_sdlS_IcoInventaire, NULL, p_sdlS_Ecran, &this->sdlR_PositionIcoInventaire); // Collage de la surface sur l'écran
    SDL_BlitSurface(this->p_sdlS_IcoDialogue, NULL, p_sdlS_Ecran, &this->sdlR_PositionIcoDialogue); // Collage de la surface sur l'écran


    // On dessine le texte (si il y en a a affiché bien sur !)
    this->clsPrimTexte_Dialogue->fct_DrawTexte(p_sdlS_Ecran, n_CurrentTime, 90, cls_Configuration::getWindowHeight() - CST_TOOLBAR_HEIGHT + 8);
    this->clsPrimTexte_DescObj->fct_DrawTexte(p_sdlS_Ecran, n_CurrentTime, 90, cls_Configuration::getWindowHeight() - CST_TOOLBAR_HEIGHT + 8);


}


/* ----------------------------------------------------
			On libere la surface de la toolbar
----------------------------------------------------- */
void cls_Toolbar::fct_FreeSurface()
{
    // On libère la surface de la souris en cours
    SDL_FreeSurface(this->p_sdlS_Toolbar);
    SDL_FreeSurface(this->p_sdlS_IcoInventaire);
    SDL_FreeSurface(this->p_sdlS_IcoDialogue);

/*
    // Joda du 15/01/2008
    free(this->clsMouse_Encours);
    free(this->clsPrimTexte_Dialogue);
    free(this->clsPrimTexte_DescObj);
*/
}
